package com.gjr.demo;

import com.gjr.eduservice.EduApplication;
import com.gjr.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.Optional;

/**
 * @author 呙境仁
 * @create 2021-09-21 7:46
 */
@SpringBootTest(classes = EduApplication.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class OptionalDemo {

    // 使用 Optional 处理 null 数据
    @Test
    public void test1() {
        User user = new User(1, null);

        Optional<User> opUser = Optional.ofNullable(user);
        String userName = opUser.map(User::getName)
                .map(String::toUpperCase)
                .orElse("null");
        // 这样虽然可以处理为 null 的数据，但是字段为空时 null 是做为字符串添加的
        System.out.println("用户名：" + userName);
    }


    @Test
    public void test2() {
        // 创建 Optional 对象
        /**  of：只能传入一个具体值，不能传入 null */
        //Optional<String> op1 = Optional.of("凤姐");
        /** ofNullable：既可以传入具体值，也可以传入null */
        // Optional<String> op2 = Optional.ofNullable("凤姐");
        /**  empty：存入的是 null */
        Optional<Object> empty = Optional.empty();

        /** 判断Optional中是否有具体值，有值返回true，没有值返回false */
        boolean present = empty.isPresent();
        /** orElse：如果 Optional 中有值，就取出这个值，如果没有值就使用参数指定的值 */
        String aDefault = (String) empty.orElse("default");
    }
}
